/**
 * 本地缓存增强工具
 * 设置过期时间
 *  
 */
const BASE_STORAGE_KEY = 'peddler';

const storage = {
	/**
	 * 同步设置本地缓存
	 * @param key 键
	 * @param value 值
	 * @param ttl 存活时间，单位毫秒
	 */
	set(key, value, ttl) {
		const data = {
			value
		}
		if (Number.isInteger(ttl) && ttl > 0) {
			const now = new Date().getTime()
			data.hasTtl = true
			data.st = now;
			data.et = now + ttl;
		}
		uni.setStorageSync(BASE_STORAGE_KEY + '_' + key, data)
	},
	/**
	 * 获取本地缓存信息
	 * @param {Object} key
	 * @param {Object} defaultValue 默认值
	 */
	get(key, defaultValue) {
		const data = uni.getStorageSync(BASE_STORAGE_KEY + '_' + key)
		if (data?.hasTtl) {
			const now = new Date().getTime()
			if (now >= data.et) {
				uni.removeStorageSync(BASE_STORAGE_KEY + '_' + key)
				return defaultValue
			}
		}
		return data?.value ?? defaultValue
	},
	/**
	 * 获取过期时间
	 * @param {Object} key 
	 * @return -1代表无过期时间
	 */
	getEt(key) {
		const data = uni.getStorageSync(BASE_STORAGE_KEY + '_' + key)
		if (data?.hasTtl) {
			return data.et
		}
		return -1
	},
	/**
	 * 删除指定key的本地缓存数据
	 * @param {Object} key
	 */
	remove(key) {
		uni.removeStorageSync(BASE_STORAGE_KEY + '_' + key)
	},
	install(Vue, options) {
		Vue.prototype.$storage = this
	}
}

export default storage